<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>let 与 const</title>
</head>
<body>
    
</body>
<script>
    //es5 
    // var num = 10;
    // var num = 20;
    // console.log(num);

    //es6
    //一、let 去声明变量
    //let 与 var的区别
    //1. let 不允许重复声明变量  var 可以重复声明变量并且覆盖
    //2. let 不允许声明提升  var 可以声明提升
    //3. let 声明的变量支持代码块（作用域）的限制  var 不受限制
    //4. let 声明的变量不会挂载到顶层对象中  var 声明的变量会自动挂载到顶层对象

    // let num = 10;
    // num = 20;
    // console.log(num);

    //es5
    //当使用创建之前使用的变量，这个叫做变量的声明提升
    // console.log(age);
    // var age = 14;

    //es6
    // console.log(age);
    // let age = 14;

    //es5
    // if(true){
    //     var num = 100;
    // }
    // console.log(num);

    //es6

    // if(true){    
    //     let num = 100;
    // }
    // console.log(num);

    // var a = 10;
    // console.log(window.a);

    // let b = 20;
    // console.log(window.b);

    // 二、const 声明常量
    // const 与 var
    // 1. const 不能重复声明常量
    // 2. const 不支持声明的提升
    // 3. const 声明的常量受代码块限制，产生独立的作用域
    // 4. const 不挂载到顶层对象

    // const c = 100;
    // console.log(window.c);

    // let 与 const 的区别
    // 1 let 声明时可以不赋值  const 声明必须赋值
    // 2. let 声明的变量时可以被更改的，  const 声明的常量不能被修改 
    // 3. const 声明的对象不可以赋值新的对象，但是可以修改属性
    
    // let age;
    // age = 18;
    // console.log(age);

    // const age;
    // age = 18;
    // console.log(age);
    // const age = 100;
    // age = 200;
    // console.log(age);

    // const obj = {
    //     name:"shane",
    //     age: 14
    // }

    // obj.age = 18;
    // console.log(obj);



</script>
</html>